<?php namespace Phpcmf\Model\Quan; // 这里需要把App改成项目目录名称

// 付款模型示例
class Dashang extends \Phpcmf\Model
{

    private $row;

    // 付款表单格式
    public function get_myfield() {

        return [
            'fieldtype' => 'Pay', // 字段类型
            'fieldname' => 'price',
            'setting' => [
                'option' => [
                    'payfile' => 'dashang.html', // 模板文件
                    'is_finecms' => 1, // 是否启用余额付款
                ],
            ]
        ];
    }

    // 付款类型名称
    public function paytype() {
        return  '<span class="label label-danger"> 打赏 </span>'; // 最好2个汉字表述
    }

    // 付款前的权限验证，返回null表示可进行付款，返回字符串是就输出字符串
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function pay_before($id, $num, $sku, $siteid) {

        list($cid, $mid) = explode('_', $id);
        $data = $this->table($siteid.'_quan_form_son')->get($cid);
        if (!$data) {
            return '打赏主题不存在';
        }

        return '';
    }

    // 付款后的验证，一般验证金额是否符合规则，返回null表示可进行付款，返回字符串是就输出字符串
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function pay_after($id, $num, $sku, $siteid) {

        $data = $this->_get_row($id, $siteid);
        $money = $this->get_price($id, $num, $sku, $siteid);

        //$config = \Phpcmf\Service::M('app')->get_config('shang');
        /*$min = floatval($config['smin']);
        if ($min > 0 && $money < $min) {
            return dr_lang('打赏金额不能低于%s元', $min);
        }*/

        /*if ($this->uid == $data['uid']) {
            return dr_lang('不能对自己打赏');
        }*/

        return '';
    }

    // 付款价格
    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    public function get_price($id, $num, $sku, $siteid) {

        // 计算付款价格
        $data = $this->_get_row($id, $siteid);

        return $data['price']; // 测试200
    }

    // 付款数据
    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    public function get_row($id, $num, $sku, $siteid) {

        // 查询数据记录，判断是否存在
        $data = $this->_get_row($id, $siteid);

        return [
            'price' => $this->get_price($id, $num, $sku, $siteid),
            'title' => '打赏：'.$data['title'],
            'sell_uid' => $data['uid'], // 商家uid
            'sell_username' => $data['author'], // 商家账号
        ];
    }

    // 付款成功
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function success($id, $data, $num, $sku) {

        // 支付成功之后的回调处理动作

        list($a, $b, $c, $siteid) = explode('-', $data['mid']);
        list($cid, $mid) = explode('_', $c);
		
		$quandata = $this->db->table('1_quan_form_son')->where('id', $id)->get()->getRowArray();

        // 打赏记录
        $rt = $this->table($siteid.'_quan_dashang_buy')->insert([
			'quanid' => $quandata['cid'],
            'tid' => $id,
            'uid' => $data['uid'],
			'touid' => $data['touid'],
			'feiyong' => abs($data['value']),
            'leixing' => 1,
            'inputtime' => SYS_TIME
        ]);
        // 打款到收款人账户
        \Phpcmf\Service::M('pay')->add_money($data['touid'], abs($data['value']));
        // 收款人增加一条收入记录
        \Phpcmf\Service::M('pay')->add_paylog([
            'uid' => $data['touid'],
            'username' => $data['tousername'],
            'touid' => $data['uid'],
            'tousername' => $data['username'],
            'mid' => $data['mid'],
            'title' => $data['title'],
            'value' => abs($data['value']),
            'type' => $data['type'],
            'status' => 1,
            'result' => $data['id'],
            'paytime' => SYS_TIME,
            'inputtime' => $data['inputtime'],
        ]);
        // 更新主表
        /*if ($rt['code']) {
            $sum = $this->db->table($siteid.'_'.$mid.'_donation')->selectSum('value')->where('cid', $cid)->get()->getRowArray();
            $this->db->table($siteid.'_'.$mid)->where('id', $cid)->set('donation', $sum['value'])->update();
            \Phpcmf\Service::L('cache')->clear('module_'.$mid.'_show_id_'.$cid);
            $data['cid'] = $cid;
            $data['mid'] = $b;

            // 初始化数据表
            $content_model = \Phpcmf\Service::M('Content', $mid);
            $content_model->_init($mid, $siteid);
            $content_model->_content_donation_after($cid, $data);

            \Phpcmf\Hooks::trigger('donation_success', $data);
        } else {
            log_message('error', '打赏付款(#'.$id.')回调失败：'.$rt['msg']);
        }*/

    }

    // 设置支付主题信息
    // $id 记录id;  $siteid 站点id
    private function _get_row($id, $siteid) {

        if (isset($this->row[$id]) && $this->row[$id]) {
            return $this->row[$id];
        }

        list($cid, $mid) = explode('_', $id);
        $this->row[$id] = $this->table($siteid.'_quan_form_son')->get($cid);

        // 此方法只能用于支付前的调用，支付成功后将不能调用post值
        $pay = \Phpcmf\Service::L('input')->post('pay'); // 这里接受pay.html模板的输入金额值
		
        $this->row[$id]['price'] = isset($pay['money']) ? $pay['money'] : 0;

        return $this->row[$id];
    }


    // 付款成功跳转URL
    // $id 记录id; $paylog 支付表记录数组
    public function call_url($id, $paylog) {

        $data = $this->_get_row($id, $paylog['site']);
        $url = "index.php?s=quan&c=son&id=".$data['id']; 
        return dr_url_prefix($url); // 跳转
    }

    // 独立的打赏页面地址
    /*public function donation_url($id, $mid = '') {

        // 模块目录识别
        defined('MOD_DIR') && MOD_DIR && $dir = MOD_DIR;
        $mid && $dir = $mid;

        return \Phpcmf\Service::L('router')->url_prefix('php', [], [], SITE_FID) . 's=shang&mid='.$dir.'&id=' . $id;
    }*/
}